//
//  TimeTrackerAppDelegate.m
//  TimeTracker
//
//  Created by rodrigop on 31.03.09.
//  Copyright BD Software 2009. All rights reserved.
//

#import "TimeTrackerAppDelegate.h"
#import "RootViewController.h"
#import "Task.h"

@implementation TimeTrackerAppDelegate

@synthesize window;
@synthesize navigationController;
@synthesize tasksFromDB;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
	
	// Configure and show the window
	databaseName=@"taskDB.sql";
	
	// Get the path to the documents directory and append the databaseName
	NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
	NSString *documentsDir = [documentPaths objectAtIndex:0];
	databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
	
	// Execute the "checkAndCreateDatabase" function
	[self checkAndCreateDatabase];
	
	// Query the database for all animal records and construct the "animals" array
	[self readTasksFromDatabase];
	
	// Configure and show the window
	[window addSubview:[navigationController view]];
	[window makeKeyAndVisible];
	
	[window addSubview:[navigationController view]];
	[window makeKeyAndVisible];
}

-(void) checkAndCreateDatabase{
	// Check if the SQL database has already been saved to the users phone, if not then copy it over
	BOOL success;
	
	// Create a FileManager object, we will use this to check the status
	// of the database and to copy it over if required
	NSFileManager *fileManager = [NSFileManager defaultManager];
	
	// Check if the database has already been created in the users filesystem
	success = [fileManager fileExistsAtPath:databasePath];
	
	// If the database already exists then return without doing anything
	if(success) return;
	
	// If not then proceed to copy the database from the application to the users filesystem
	
	// Get the path to the database in the application package
	NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
	
	// Copy the database from the package to the users filesystem
	[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
	
	[fileManager release];
}

-(void) readTasksFromDatabase {
	// Setup the database object
	sqlite3 *database;
	
	// Init the animals Array
	tasksFromDB = [[NSMutableArray alloc] init];
	
	// Open the database from the users filessytem
	if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
		// Setup the SQL Statement and compile it for faster access
		const char *sqlStatement = "select * from tasks";
		sqlite3_stmt *compiledStatement;
		if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
			// Loop through the results and add them to the feeds array
			while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
				// Read the data from the result row
				NSString *taskName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
				NSString *taskDescription = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
				NSString *taskStartDate = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];
				NSString *taskDueDate = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 4)];
				NSInteger *taskSynchFlag =sqlite3_column_int(compiledStatement, 5);
				
				// Create a new animal object with the data from the database
				
				Task *task = [[Task alloc] init];
				task.taskName = taskName;
				task.description = taskDescription;
				NSDateFormatter *formatter=[[[NSDateFormatter alloc] init] autorelease];
				[formatter setDateFormat:@"yyyy-MM-dd"];
				task.startDate =[formatter dateFromString: taskStartDate];
				task.dueDate =[formatter dateFromString: taskDueDate];
				
				
				// Add the animal object to the animals Array
				[tasksFromDB addObject:task];
				
				[task release];
			}
		}
		// Release the compiled statement from memory
		sqlite3_finalize(compiledStatement);
		
	}
	sqlite3_close(database);
	
}

- (void)applicationWillTerminate:(UIApplication *)application {
	// Save data if appropriate
}


- (void)dealloc {
	[navigationController release];
	[window release];
	[tasksFromDB release];
	[super dealloc];
}

@end
